package com.longrise.common.utils;

import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.provider.Settings;
import android.text.TextUtils;

import com.longrise.common.datasource.local.sp.CacheUtils;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.UUID;

/**
 * Created by callxkj
 * 设备util
 */
public class DeviceUtils {

    private static final String TAG = "DeviceUtils";

    /**
     * 厂商信息
     *
     * @return
     */
    public static String getProductInfo() {
        return android.os.Build.MODEL;
    }

    /**
     * release版本
     *
     * @return
     */
    public static String getReleaseVersion() {
        return android.os.Build.VERSION.RELEASE;
    }

    /**
     * SDK_INT 版本
     *
     * @return
     */
    public static int getSDKVersion() {
        return android.os.Build.VERSION.SDK_INT;
    }

    /**
     * 获取软件的生成的 uuid
     */
    public static String getbbuuid() {
        String bbuuid = CacheUtils.getString("bbuuid", null);
        if (TextUtils.isEmpty(bbuuid)) {
            bbuuid = UUID.randomUUID().toString();
            CacheUtils.setString("bbuuid", bbuuid);
            return bbuuid;
        } else {
            return bbuuid;
        }
    }

    /**
     * 获取设备唯一id
     * 待验证 xkj
     */
    public static String getUniqueDeviceId(Context context) {
        String bbuniqueid = CacheUtils.getString("bbuniqueid", null);
        if (TextUtils.isEmpty(bbuniqueid)) {
            bbuniqueid = getuinqueID(context);
            CacheUtils.setString("bbuniqueid", bbuniqueid);
            return bbuniqueid;
        } else {
            return bbuniqueid;
        }
    }

    private static String getuinqueID(Context context) {
        StringBuilder sb = new StringBuilder();
        String androidId = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
        if (!TextUtils.isEmpty(androidId) && !"9774d56d682e549c".equals(androidId)) {
            sb.append(androidId);
        } else {
            sb.append(UUID.randomUUID().toString());
        }
        sb.append(android.os.Build.BOARD);//获取设备基板名称
        sb.append(android.os.Build.BOOTLOADER);//获取设备引导程序版本号
        sb.append(android.os.Build.BRAND);//获取设备品牌
        sb.append(android.os.Build.CPU_ABI);//获取设备指令集名称（CPU的类型）
        sb.append(android.os.Build.CPU_ABI2);//获取第二个指令集名称
        sb.append(android.os.Build.DEVICE);//获取设备驱动名称
        sb.append(android.os.Build.DISPLAY);//获取设备显示的版本包（在系统设置中显示为版本号）和ID一样
        sb.append(android.os.Build.FINGERPRINT);//设备的唯一标识。由设备的多个信息拼接合成。
        sb.append(android.os.Build.HARDWARE);//设备硬件名称,一般和基板名称一样（BOARD）
        sb.append(android.os.Build.ID);//设备版本号。
        sb.append(android.os.Build.MODEL);//获取手机的型号 设备名称。
        sb.append(android.os.Build.MANUFACTURER);//获取设备制造商
        sb.append(android.os.Build.PRODUCT);//整个产品的名称
        sb.append(android.os.Build.TAGS);//设备标签。如release-keys 或测试的 test-keys
        sb.append(android.os.Build.TYPE);//设备版本类型 主要为 "user" 或 "eng".
        sb.append(android.os.Build.USER);//设备用户名 基本上都为android -build
        sb.append(android.os.Build.VERSION.RELEASE);//获取系统版本字符串。如4.1.2 或2.2 或2.3等
        sb.append(android.os.Build.VERSION.CODENAME);//设备当前的系统开发代号，一般使用REL代替
        sb.append(android.os.Build.VERSION.INCREMENTAL);//系统源代码控制值，一个数字或者git hash值
        sb.append(android.os.Build.VERSION.SDK_INT);//系统的API级别 数字表示
        sb.append(android.os.Build.SERIAL);
        String uniquid = md5(sb.toString().trim().toUpperCase());
        return uniquid;
    }

    private static String md5(String str) {
        byte[] hash;
        try {
            hash = MessageDigest.getInstance("MD5").digest(str.getBytes("UTF-8"));
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return null;
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            return null;
        }
        StringBuilder hex = new StringBuilder(hash.length * 2);
        for (byte b : hash) {
            if ((b & 0xFF) < 0x10) hex.append("0");
            hex.append(Integer.toHexString(b & 0xFF));
        }
        return hex.toString().toUpperCase();
    }

    public static String getVersionName() {
        Context appCxt = AppUtil.getContext();
        String verisonName = "";
        if (appCxt == null) {
            return verisonName;
        }
        PackageManager pm;
        PackageInfo pi;
        try {
            pm = appCxt.getPackageManager();
            pi = pm.getPackageInfo(appCxt.getPackageName(), 0);
            verisonName = pi.versionName;
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        return verisonName;
    }
}
